package co.com.travelsoft.ati.client;

import java.util.ArrayList;
import java.util.List;

import co.com.travelsoft.ati.dto.EventoCiudadDto;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.maps.client.InfoWindowContent;
import com.google.gwt.maps.client.MapWidget;
import com.google.gwt.maps.client.Maps;
import com.google.gwt.maps.client.control.LargeMapControl;
import com.google.gwt.maps.client.geom.LatLng;
import com.google.gwt.maps.client.overlay.Marker;
import com.google.gwt.user.client.ui.DockLayoutPanel;


public class MapaEventos implements EntryPoint {
	
	private DockLayoutPanel dock = new DockLayoutPanel(Unit.PX);

	public void onModuleLoad() {
		   Maps.loadMapsApi("", "2", false, new Runnable() {
			      public void run() {
			        buildUi();
			      }
			    });

	}
	
	private void buildUi() {
		
		List<EventoCiudadDto> eventos = new ArrayList<EventoCiudadDto>();
		eventos.add(obtenerEvento("Rio de Janeiro","Carnaval de Rio","Cultural","-21","-41"));
		eventos.add(obtenerEvento("Buenos Aires","Campeonato de futlbol","Deportivo","-34","-58"));
		eventos.add(obtenerEvento("Miami","Competencia de Surf","Deportivo","25","-80"));
		eventos.add(obtenerEvento("Bogota","Festival internacional de teatro","Cultural","4","-74"));
		
		
		
	    // Open a map centered on Cawker City, KS USA
	    LatLng cawkerCity = LatLng.newInstance(39.509, -98.434);

	    final MapWidget map = new MapWidget(cawkerCity, 2);
	    map.setSize("100%", "100%");
	    // Add some controls for the zoom level
	    map.addControl(new LargeMapControl());

	    // Add a marker
	    //map.addOverlay(new Marker(cawkerCity));

	    // Add an info window to highlight a point of interest
	    //map.getInfoWindow().open(map.getCenter(),
	    //    new InfoWindowContent("World's Largest Ball of Sisal Twine"));
	    adicionarEventos(map, eventos);
	    
	    dock.addNorth(map, 500);

	    // Add the map to the HTML host page
	    //RootLayoutPanel.get().add(dock);
	  }

	private EventoCiudadDto obtenerEvento(String ciudad, String nombreEvento, String tipo,String latitud,String longitud) {
		EventoCiudadDto evento = new EventoCiudadDto();
		evento.setCiudad(ciudad);
		evento.setEvento(nombreEvento);
		evento.setTipoEvento(tipo);
		evento.setLatitud(latitud);
		evento.setLongitud(longitud);
		return evento;
	}
	
	
	private void adicionarEventos(MapWidget map, List<EventoCiudadDto> eventos){
		for (EventoCiudadDto eventoCiudadDto : eventos) {
			LatLng ciudad = LatLng.newInstance(Double.valueOf(eventoCiudadDto.getLatitud()), Double.valueOf(eventoCiudadDto.getLongitud()));
			map.addOverlay(new Marker(ciudad));
		    map.getInfoWindow().open(ciudad,
			        new InfoWindowContent("Ciudad: "+eventoCiudadDto.getCiudad()+"<br> Evento: "+eventoCiudadDto.getEvento()+"<br> Tipo: "+eventoCiudadDto.getTipoEvento()));
			
		}
	}
	
	

	public DockLayoutPanel getDock() {
		return dock;
	}

	
	

}
